/*
 * Copyright 2010 Michael Nitsche
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package de.mnit.basis.sys.datei;

import java.io.InputStream;
import java.net.URL;

import de.mnit.basis.fehler.Fehler;
import de.mnit.basis.fehler.system.F_Sys_Datei;
import de.mnit.basis.sys.Ausgabe;

/**
 * @author Michael Nitsche
 *
 * Bei direktem Zugriff über Klasse wird "/" am Anfang benötigt. Über Klassenlader, nicht!
 */
public class JarZugriff {

	//Deaktiviert, werden die überhaupt wirklich gebraucht?
//	public static String gKopiePfad(String datei_im_jar, String ziel_lokal) throws F_Sys_InOut {
//		return gKopiePfad(datei_im_jar, DSDatei.neu(ziel_lokal));
//	}
//
//	public static String gKopiePfad(String datei_im_jar, S_Datei ziel_lokal) throws F_Sys_InOut {
//		try {
//			InputStream is = JarZugriff.gJarStream(datei_im_jar);
//			StreamPumpe.verbinde(is, ziel_lokal.schreiben(), false, true);
//			return ziel_lokal.gPfadKomplett();
//		}
//		catch(F_Sys_Datei e) {
//			throw Fehler.weitergeben(e, "Kopieren der Datei aus dem Jar ist gescheitert", datei_im_jar, ziel_lokal);
//		}
//	}

	public static InputStream gJarStream(String datei) throws F_Sys_Datei {
		iDateiPruefen(datei);
		try {
			URL url=JarZugriff.class.getResource(datei);
			if(url==null)
				Fehler.datei.da_Fehlt(datei);
			return JarZugriff.class.getResourceAsStream(datei);
		}
		catch(F_Sys_Datei e)   { throw iFehler(e,datei); }
	}

	// INTERN

	private static void iDateiPruefen(String datei) {
		Fehler.text.wenn_Null_o_Leer(datei);
		if(datei.charAt(0)!='/')
			Fehler.text.da_Ungueltig(datei, "Jar-Pfad muß mit / beginnen!");
	}

	private static F_Sys_Datei iFehler(F_Sys_Datei e, String datei) {
		Ausgabe.text("Dateifehler: "+datei);
		if(datei.indexOf('/')<0)
			Ausgabe.text("Vermutlich wurde als Pfadtrenner '.' und keine '/' verwendet!");
		e.plusNotiz(datei);
		return e;
	}
}
